package calpi;

import calpi.util.Crypter;
/**
 * Classe que representa um usuário que usa o sistema.
 * @author Sem iNick
 */
public class Usuario {

    private String nome;
    private String senha;
    private String login;

    /**
     * Cria um usuário do sistema com seu nome e senha e login. Lembrando que a
     * senha não poderá ser recuperada somente mudada ou comparada
     * @param nome Nome do usuário
     * @param senha Senha do usuário
     * @param login Login do usuário
     * @throws NullPointerException Se nome ou senha ou login forem nulos
     * @throws IllegalArgumentException Se a senha ou login não tiverem pelo menos
     * um caracter
     */
    public Usuario(String nome, String login, String senha) {

        setNome(nome);
        setLogin(login);
        setSenha(senha);
    }

    /**
     * Setter para o nome do usuário
     * @param nome Novo nome do ususário
     * @throws NullPointerException se nome for nulo
     */
    public void setNome(String nome) {

        if (nome == null) {

            throw new NullPointerException("Nome do usuário nulo");
        }

        this.nome = nome;
    }

    /**
     * Setter para senha
     * @param senha Nova senha do usuário
     * @throws NullPointerException se senha for nula
     * @throws IllegalArgumentException se o comprimento da senha for menor que um
     */
    public void setSenha(String senha) {

        if (senha == null) {

            throw new NullPointerException("Senha nula");
        }

        if (senha.length() == 0) {

            throw new IllegalArgumentException("Tamanho da senha deve ser pelo menos 1");
        }

        this.senha = Crypter.encodeMD5(senha);
    }

    /**
     * Setter para login do ususário
     * @param login Novo login do usuário
     * @throws NullPointerException se login for nula
     * @throws IllegalArgumentException se o comprimento do login for menor que um
     */
    public void setLogin(String login) {

        if (login == null) {

            throw new NullPointerException("Login nulo");
        }

        if (login.length() == 0) {

            throw new IllegalArgumentException("Tamanho do login deve ser pelo menos 1");
        }

        this.login = login;
    }

    public String getNome() {

        return nome;
    }

    public String getLogin() {

        return login;
    }

    /**
     * Getter para a senha.
     * @return A senha do usuário criptografada
     */
    public String getSenha() {

        return senha;
    }

    /**
     * Verifica se a senha passada é igual a senha do usuário. O teste é feito
     * usando caso sensitivo.
     * @param senha Senha a ser testada
     * @return true se as senhas forem iguais ou false caso contrário
     */
    public boolean validaSenha(String senha) {

        return this.senha.equals(Crypter.encodeMD5(senha));
    }
}
